Java正则表达式匹配子字符串/字符在字符串中出现的次数
我正在编写一个程序来识别有效的(由用户定义的)表达式,并且我需要能够匹配特定字符在一个部分与另一个部分匹配的次数。例如,如果我使用pq系统,在
(some number of dashes)p-q(some number of dashes)
p之前的破折号数量必须与q之后的破折号数量相匹配(对于任意数量的破折号),才能使其成为有效表达式
我正试图使这个强大/通用化(用户定义的规则,你可以使用*而不是-,你可以这样做,你需要在q后面增加两倍的破折号,等等),我在考虑添加一些特殊的文本(比如-(%%n%%)p-q-(%%n%%)
,任何在它后面有(%%n%%)
的东西都必须精确地显示“n”次),但在我这么做之前,是否有任何内置的regex功能/相当简单的修复程序,或者我是否需要从%%开始
提前谢谢
编辑:再看看我的问题,更好的方法是我需要找出一种方法来标记两个(或可能更多)子字符串(以一般方式)以验证它们是否匹配。我在如何操作上有一定程度的灵活性(不仅仅局限于regex),但系统的其余部分使用regex,因此一些不冲突/大规模过度复杂的操作是理想的
# 1 楼答案
如果我没弄错的话,正则表达式是不够的,因为您正试图捕获由非正则语法生成的字符串。一些简单的pushdown automaton应该在这里有所帮助
# 2 楼答案
如果要允许用户选择之前和之后的编号, 正则表达式将是微不足道的
通常,这是一种为before和after构造变量regex的方法
如果您想动态构造字符串,它应该是这样的
"(-{1," + vNum + "})p-q\\1"
您也可以像这样在后端添加一个量词
"(-{1," + vNum + "})p-q\\1{" + nFactor + }"
您可以更改量词的形式以获得所需的任何内容,或范围{1,3}等
但是请记住,捕获组包含后端所需内容的子集